iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
Claude AI

AI 時代下最值得投資的 UI 自動化:30 天用 Claude Code 學會寫 Playwright系列 第 25

Day 25: 放進 CI:自動跑測試與向上展示成果

  • 分享至 

  • xImage
  •  

到目前為止,你的測試都是「想到才跑」。這一篇之後,它們會變成 24 小時值班的守衛:程式一有改動,自動全員出動。

前面二十幾篇在練功,這一篇開始上工。門檻比你想的低——手上的 TodoMVC 練習專案、一個免費的 GitHub 帳號,加上 Claude Code,一個下午就能完成。全程不需要你自己寫設定檔。

這篇會帶你做到三件事:讓 CI 跑起來、學會處理紅燈、把成果講給主管聽。

一、CI 是什麼

一句話:團隊的程式碼倉庫接了一個機器人,每當有人提交程式,它自動開一台乾淨的機器、安裝環境、跑完所有測試、把結果通知大家。

https://ithelp.ithome.com.tw/upload/images/20260822/20161809SdZ56Z4Uuc.png
圖 1:從提交程式到自動把關的完整流程

關鍵在「自動」兩個字。把關不再依賴有人記得跑測試,而是想繞都繞不過去。你做手動測試多年最深的無力感之一——「改了東西沒人知會測試」——在這裡有了結構性的解法。

先講清楚 CI 不會做的事:它不會幫你寫測試,也不會讓寫得爛的測試變好。它只做一件事,把已經存在的測試,每次都跑。所以前面二十四篇的功夫,決定了這道防線值不值錢。

二、先看懂五段骨架,再談要用哪個平台

很多人第一時間卡在這裡:「我們公司用的是 Jenkins,文章教 GitHub Actions,看了也用不上。」這個顧慮可以先放下。

所有 CI Server 的設定檔,講的都是同樣五件事:
https://ithelp.ithome.com.tw/upload/images/20260822/201618092aKSP5d0rk.png
圖 2:任何 CI Server 都是這五段,換平台只是換寫法

把五段跟四個常見平台放在一起看,會更有感覺:
https://ithelp.ithome.com.tw/upload/images/20260822/201618098VqcaEEBOI.png

實務建議:先在 GitHub 上把整套跑通一次(免費、開一個新專案只要五分鐘),把「五段」的感覺建立起來,再回公司的平台複製同一套骨架。搬家時你要問的只有一句話:「同樣這五段,在 Jenkins 上怎麼寫?」

三、動手做:三十分鐘把 TodoMVC 送上 CI

全程需要準備的東西:一個 GitHub 免費帳號、本機可以正常執行的 TodoMVC 練習專案、Claude Code。

Step 0|先確認本機是綠的
在自己電腦上跑一次 npx playwright test,全部通過再往下走。本機是紅的就推上 CI,只會讓你分不清問題出在哪一邊。

Step 1|讓 Claude Code 幫專案做上 CI 前的體檢
▍給 Claude Code 的提示詞

我要把這個 Playwright 專案放上 CI。請先幫我檢查會在 CI 上出問題的地方:
 
1. 有沒有寫死的本機路徑、寫死的網址、寫死的帳號密碼
2. 有沒有依賴「我電腦上本來就有的資料」才能跑的測試
3. 有沒有用固定秒數等待(waitForTimeout)
4. package.json 的相依套件與 scripts 是否完整,別人 clone 下來能不能直接跑

把問題列成清單,標出檔案跟行數,先不要動手改,讓我確認。

為什麼先體檢:在 CI 上除錯比在本機慢十倍,每改一次都要等它重跑一輪。先在本機把明顯的地雷清掉,可以省下一整個下午。

Step 2|請 Claude Code 產生設定檔
▍給 Claude Code 的提示詞

幫這個專案設定 GitHub Actions,要求如下:
 
- 每次 push 和 pull request 都自動執行全部 Playwright 測試
- 使用 Node 20,並安裝 Playwright 需要的瀏覽器
- 測試帳號密碼用 GitHub Secrets 管理,不要出現在設定檔裡
- 不論成功或失敗,都保留 HTML 報告與失敗時的 trace,讓我可以下載
- 整包測試超過 15 分鐘就中止
 
設定完成後,用白話逐段解釋這個檔案在做什麼,並告訴我 Secrets 要去哪裡設定。

最後那句「用白話逐段解釋」不要省略。你不需要會寫 YAML,但必須看得懂它在做什麼——哪天要調整、要搬家、要跟開發解釋,靠的都是這個。

Step 3|把密碼放進 Secrets
第 12 篇說過密碼不進程式碼,CI 上的正解是平台提供的 Secrets 機制。以 GitHub 為例,路徑是:

Repository → Settings → Secrets and variables → Actions → New repository secret

設定一次,執行時自動注入,任何人在執行紀錄裡看到的都是 ***。順手再做一件事:
▍給 Claude Code 的提示詞

掃描整個專案(包含測試檔、設定檔、README、git 歷史紀錄),
找出任何看起來像帳號、密碼、API key、token 的字串,列出位置。

Step 4|推上去,看第一次自動執行
▍給 Claude Code 的提示詞

幫我把這個專案推上 GitHub。我還沒有建 repository,
請一步一步告訴我要做什麼,指令直接給我可以貼上的版本。

推完之後,打開 GitHub 上的 Actions 頁籤,你會看到一顆正在轉的黃點。這是你的測試第一次在別人的機器上跑。

Step 5|故意弄壞它,走完一次紅燈流程
跑出綠燈只是確認一切正常,真正要練的是紅燈來的時候怎麼辦。挑一個測試,把預期結果改成錯的(例如把預期的待辦數量從 2 改成 3),推上去。

然後完整走一次:

收到通知 → 打開 CI 執行紀錄 → 找到失敗的那一條
        → 下載 artifacts 裡的報告與 trace
        → 用第 10 篇的方法看它停在哪一步
        → 改回來 → 看它變綠

這一輪走完,你就具備了在 CI 上除錯的完整能力。之後遇到的每一顆紅燈,流程都是這個。

附:一份可以直接用的 GitHub Actions 設定檔
放在專案的 .github/workflows/playwright.yml。右邊的註解對應圖 2 的五段骨架:

name: Playwright Tests
 
on:                                    # ① 什麼時候跑
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]
 
jobs:
  test:
    timeout-minutes: 15
    runs-on: ubuntu-latest             # ② 在哪裡跑
 
    steps:
      - uses: actions/checkout@v4
 
      - uses: actions/setup-node@v4    # ③ 準備什麼
        with:
          node-version: 20
 
      - name: 安裝相依套件
        run: npm ci
 
      - name: 安裝瀏覽器
        run: npx playwright install --with-deps
 
      - name: 執行測試                  # ④ 跑什麼
        run: npx playwright test
        env:
          TEST_USER: ${{ secrets.TEST_USER }}
          TEST_PASSWORD: ${{ secrets.TEST_PASSWORD }}
 
      - name: 保留報告與 trace           # ⑤ 留下什麼
        uses: actions/upload-artifact@v4
        if: always()
        with:
          name: playwright-report
          path: playwright-report/
          retention-days: 7

特別注意 if: always() 這一行。少了它,測試失敗時報告不會被保留,而失敗那一次的報告,正是你最需要的。

四、換成公司在用的 CI Server

骨架相同,所以搬家的提示詞也長得一樣:
▍給 Claude Code 的提示詞(換平台通用)

我有一份可以正常運作的 GitHub Actions 設定檔(附在下面),
請幫我改寫成 GitLab CI 的 .gitlab-ci.yml,功能要完全對應:
一樣的觸發時機、一樣的 Node 版本、一樣用 Secrets 管理帳密、一樣保留報告與 trace。
 
改寫完成後,列一張對照表告訴我哪一段對應到原本的哪一段,
以及 GitLab 上的密碼要去哪裡設定。
 
[貼上原本的 workflow 檔]

把「GitLab CI 的 .gitlab-ci.yml」換成 Jenkinsfile、azure-pipelines.yml、bitbucket-pipelines.yml,提示詞完全通用。

幾個搬家時最常踩到的差異,先知道會省很多時間:

• 瀏覽器怎麼來:雲端平台習慣用 npx playwright install --with-deps 現裝。公司的 Jenkins 機器如果沒有對外網路權限,通常改用 Playwright 官方的 Docker image。
• 報告怎麼看:各平台「產物」的名稱不同(artifacts、archiveArtifacts、Publish Build Artifacts),作用都是把檔案留下來讓你下載。
• 誰來跑:雲端平台有現成的機器可以用;Jenkins 通常要指定 agent 或 node,這一段要找公司管 Jenkins 的人問清楚,問一次就好。

五、第一週的經典場面:本機綠、CI 紅

這件事大概率會遇到。別慌,兇手名單你都認識:

https://ithelp.ithome.com.tw/upload/images/20260822/201618096opBZI47oS.png
圖 3:本機過、CI 不過的三大兇手與對應解法

除錯的時候,把資訊整包餵給 Claude Code,比自己盯著 log 看快很多:
▍給 Claude Code 的提示詞

這條測試在我電腦上會過,在 CI 上失敗。以下是 CI 的錯誤訊息與測試程式碼。
 
請先判斷這比較像環境差異、時序問題,還是資料互相干擾,說明你的理由,
再給我修改建議。修改後的測試在本機跟 CI 上都要能穩定通過。
 
[貼上 CI 的錯誤訊息]
[貼上測試程式碼]

「先判斷比較像哪一類、說明理由」這一句很重要。少了它,AI 傾向直接動手改,而最常見的改法是把等待時間加長——問題被蓋住了,但沒有解決,過兩週它會用更難查的形式回來。

可維護性篇前面幾篇的功夫,全是為了這一刻。測試在自己電腦跑得過只是及格,在一台陌生的機器上穩定跑得過,才算畢業。

六、紅燈進來,你的第一個動作

https://ithelp.ithome.com.tw/upload/images/20260822/20161809WdipR57rRk.png
圖 4:一顆紅燈進來的三種可能與對應處理

你在這裡有一個天然的角色:紅燈的第一線判讀者。一顆紅燈進來,是產品 bug、測試自己寫錯、還是環境在抖,你用第 10 篇的功夫給出初判,決定該叫醒誰。這個角色做得好,你就是團隊裡紅燈公信力的守護者。

三個實務提醒:
• 分類要留紀錄。開一份很簡單的表就好(日期、紅燈原因、歸到哪一類、怎麼處理),兩個月後你會看出某一類特別多,那就是下一個該修的地方。
• 「環境在抖」不能一直當免死金牌。同一條測試因為抖動被重跑三次,它就升格成待辦事項,回去看第 23 篇的處理方式。
• 初判不需要百分之百準確。你的價值在於「五分鐘內給出方向」,而不是自己把每個問題都查到底。

七、技術半天搞定,文化決定生死

CI 的技術部分,一個下午就能跑起來。真正的成敗在團隊怎麼對待紅燈。
https://ithelp.ithome.com.tw/upload/images/20260822/20161809LKV5cfQmFi.png
圖 5:紅燈是命令還是背景音,決定 CI 的生死

決定走向的,是前面幾篇的累積:測試穩(第 23 篇)、可讀(第 21、24 篇)、獨立(第 22 篇),紅燈才有公信力,團隊才願意為它停下來。這件事喊口號沒有用,靠的是紅燈每一次都「值得停」,慢慢掙來的信任。

你能做的具體事情有兩件:讓紅燈盡量準確(前面幾篇的功夫),以及每一次紅燈都在第一時間給出判斷(上一節的角色)。

八、跟主管交代成果:三件套

CI 跑起來之後,很快會面對一個現實的問題:「所以自動化這陣子的產出是什麼?」這題答得好不好,決定資源會不會繼續給。

https://ithelp.ithome.com.tw/upload/images/20260822/201618099o3wK9xP1Y.png
圖 6:向上展示成果的三件套

準備三樣東西,每次都拿得出手:

• 一張報表:CI 的執行紀錄與通過率趨勢,證明防線天天在值班。截圖就行,不用做簡報。
• 一個案例:某次改版被測試擋下來的真實 bug,講清楚「如果沒有這道防線,它會流到哪裡」。一個具體案例勝過十頁統計。
• 一筆帳:回歸測試從手動點一輪的工時,到現在自動跑完的時間。省下的人力去了哪裡也要講清楚——去做探索測試和新功能驗證。

頻率上,雙週或每月一次、五分鐘講完就好。目的是讓決策者持續看見:這條生產線每天都在運轉。
一個實作提醒:「一筆帳」的基準值現在不記,以後就沒得比。今天就把手動回歸一輪的工時寫下來,一行字也好。


上一篇
Day 24: 測試的命名與組織:讓半年後的自己看得懂
下一篇
Day26: 測試會過,不代表測得對:如何驗證 AI 寫的測試
系列文
AI 時代下最值得投資的 UI 自動化:30 天用 Claude Code 學會寫 Playwright26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言